// 对数器的概念
// 对数器就是类似于一个随机样本产生装置，在解决一个问题的时候我们可能有一个时间复杂度比较低的方案方案一，有一个我们可以确定正确但是复杂度比较高的方案方案二
// 我们产生的样本同时跑这两个方案，看看的出来的结果是否相同，当数据量足够大的时候我们就可以确定方案一也是一个正确的方案
// 我们可以写一个对数器来判断插入排序是否可靠,正确方案我们选择数组中自带的排序方法sort，我们先来初始化一下对数器
import insertionSort from './5.插入排序'
/**
 * 用于产生一个随机数组，数组的长度随机值随机
 * @param maxSize 返回的数组长度的最大值
 * @param maxValue 返回的数组项的最大值和-的最小值
 * @returns 
 */
const generateRandomArrays = (maxSize: number,maxValue: number): number[] => {
    let arr:number[] = []
    for(let i = 0 ; i < Math.floor((maxSize+1)*Math.random()) ; i++){
        arr.push(Math.floor((maxValue+1)*Math.random()) - Math.floor((maxValue+1)*Math.random()))
    } 
    return arr
}
/**
 * 排序方法
 * @param arr 需要升序的数组
 */
const comparator =  (arr: number[]) => {
    arr.sort((a, b) => a - b)
}
/**
 * 一个简单的对数器
 */
const logarithm = () =>{
    const testTime = 50000    //我们取五万份数据
    const maxSize = 100       //产生的数组的随机长度最大值
    const maxValue = 100      //产生的数组的随机最大值
    let succed = true       //是否出现不符合数据
    for(let i = 0; i < testTime ; i++){
        const arr1 = generateRandomArrays(maxSize, maxValue)
        const arr2 = [...arr1]
        insertionSort(arr1)     //我们手写的插入排序方法
        comparator(arr2)
        if(arr1.toString() !== arr2.toString()){
            succed = false
            break
        }
    }
    console.log(succed?'你写的没问题，尝试多一点数据试试':'改bug去吧')
}
// logarithm()
export default {
    logarithm, 
    generateRandomArrays
}
